iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

昨天介紹完 @AppStorage,今天來介紹一下一個好玩的 View。

NavigationStack

在 iOS 16 之後 SwiftUI 棄用 NavigationView,改用 NavigationStack。

在使用 NavigationStack 時,如果沒有 title 或是其他物件的話,NavigationBar 預設會隱藏起來,所以需要新增一些 modifier 來顯示 NavigationBar。

NavigationStack {
    VStack(alignment: .center, spacing: 50) {
    }
    .toolbar(.visible, for: .navigationBar)
    .toolbarBackground(Color("navigationBar"), for: .navigationBar)
    .toolbarBackground(.visible, for: .navigationBar)
    .navigationBarTitleDisplayMode(.inline)
}

在看成果之前,先來解釋一下:

  1. toolbar(.visible, for: .navigationBar)
    這個 modifier 將 toolbar 設定為可見,因為原本 NavigationBar 內若沒有設定 title 或其他東西,會隱藏起來,所以這行是將 toolbar 設為可見,用來搭配下面的 modifier。

  2. toolbarBackground(Color("navigationBar"), for: .navigationBar)
    這個 modifier 是設定 toolbar 的背景顏色為 "navigationBar"。

  3. toolbarBackground(.visible, for: .navigationBar)
    這個 modifier 的功能是將 toolbar 背景設為可見。

  4. navigationBarTitleDisplayMode(.inline)
    這個 modifier 是將 NavigationBar 的樣式固定。

接下來看看成果,成功顯示出來了。

NavigationLink

接下來介紹一下 NavigationLink,這裡是用 NavigationLink 來執行跳頁的功能,讓我有點意外的是 NavigationLink 竟然能適用 Button 的 modifier。

NavigationStack {
    VStack(alignment: .center, spacing: 50) {
        NavigationLink(destination: MarketingPageView()) {
            Text("開始使用").font(.system(size: 21))
                .frame(minWidth: 0, maxWidth: .infinity)
                .padding(5)
            }
            .tint(.red)
            .buttonStyle(.borderedProminent)
        }
        .padding()
        .toolbar(.visible, for: .navigationBar)
        .toolbarBackground(Color("navigationBar"), for: .navigationBar)
        .toolbarBackground(.visible, for: .navigationBar)
        .navigationBarTitleDisplayMode(.inline)
  1. NavigationLink(destination: MarketingPageView())
    這行 NavigationLink 裡指定了要跳轉的頁面。

  2. 除此之外 NavigationLink 還有很多變化,例如:
    NavigationLink(title: StringProtocol, destination: () -> View)
    NavigationLink(value: (Decodable & Encodable & Hashable)?, label: () -> View)等。

來看看成果,看起來就跟 Button 一樣。

那關於 NavigationStack 就先介紹到這裡。


上一篇
Day 17:資料持久化(2)
下一篇
Day 19:CoreBluetooth(1)
系列文
SwiftUI學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言